package sparrowGui
{
	import asCachePool.ClassObjectPool;
	
	import flash.display.Sprite;

	/**
	 * 本GUI的配置文件，某些组件需要通过此单例的舞台信息等。
	 * @author Pelephone
	 * @website http://cnblogs.com/pelephone
	 * @email pelephone@163.com
	 */	
	public class SparrowGUI
	{
		////////////////////////////////////////
		// 静态参数
		////////////////////////////////////////
		
		public static var version:Number = 2.01;
		
		/**
		 *  纵向滚动
		 */
		public static const HORIZONTAL:String = "horizontal";
		
		/**
		 *  横向滚动
		 */
		public static const VERTICAL:String = "vertical";
		
		/**
		 * 滚动条的最小宽/高度(上下按钮高相加)
		 */		
		public static const MIN_SCROLL_VALUE:int = 28;
		/**
		 * 中轴最小宽/高度
		 */
		public static const MIN_SLIDER_VALUE:int = 8;
		/**
		 * 延迟x秒跑快速移动
		 */
		public static const DELAY_WAIT_TIME:int = 500;
		
		public static var mainDisp:Sprite;
		public static var stageWidth:int;
		public static var stageHeight:int;
		
		protected static var instance : SparrowGUI; 
		
		/**
		 * 类缓存工具,用于缓存class生成的对象 
		 */
		private var classCache:ClassObjectPool;
		
		/**
		 * 使用本组件必须先初始相关参数
		 * @param s		舞台显示对象，警告窗组件用于addchild显示对象等用到
		 * @param sw	窗体宽,窗组件移动范围用到
		 * @param sh	窗体高,窗组件移动范围用到
		 * @uiManger	UI样式管理器
		 */
		public function SparrowGUI(s:Sprite=null,sw:int=100,sh:int=100)
		{
			if (instance != null) throw Error("此单例已经存在了");
			if (s == null) throw Error("不能为空");
			mainDisp = s;
			stageWidth = sw;
			stageHeight = sh;
			
//			uiMgr = uiManger || new UIMgr();
			instance = this;
			
			init();
		}
		
		//获取单例
		public static function getIns():SparrowGUI {
			if (instance == null) instance = new SparrowGUI( );
			return instance;
		}
		
		protected function init():void
		{
			classCache = new ClassObjectPool();
		}
		
		/**
		 * 获取UI管理器
		 * @return 
		 
		public function getUIMgr():IUIMgr
		{
			return uiMgr;
		}*/
		
		/**
		 * 将对象放入类缓存
		 */
		public static function putInClassCache(obj:Object):void
		{
			getIns().classCache.putInPool(obj);
		}
		
		/**
		 * 通过类获取对象
		 */
		public static function getObjByClassCache(cla:Class):*
		{
			return getIns().classCache.getObj(cla);
//			if(!res)
//				res = new cla();
//			return res;
		}
		
		//////////////////////////
		// 皮肤样式相关
		/////////////////////////
		
/*		public function getDefaultUIByName(uiName:String):DisplayObject
		{
			return uiMgr.getDefaultUIByName(uiName);
		}
		
		public function setSkinDefaultUI(skin:Object,uiName:String):Object
		{
			return uiMgr.setSkinDefaultUI(skin,uiName);
		}
		
/*		public function getUIByVars(uiVars:Object):DisplayObject
		{
			return uiMgr.getUIByVars(uiVars);
		}*/
		
/*		public function setComponentDefaultStyle(component:ISkinUI):ISkinUI
		{
			return uiMgr.setComponentDefaultStyle(component);
		}
		
		public function getTagClass(clzName:String):Class
		{
			return uiMgr.getTagClass(clzName);
		}*/
	}
}
